package Soligee.model.vo.cadastros;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="categoria")
public class CategoriaVO implements Serializable
{   
    @Id
    @SequenceGenerator( name = "cod_categoria", sequenceName = "cod_categoria_seq", allocationSize = 1 )
    @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "cod_categoria" )
    @Column (name = "cod_categoria", nullable = false)
    private int codCategoria;

    @Column (name="descricao", nullable = false)
    private String descricao;

    @Column ( name="comissao_venda", nullable = false)
    private double comissaoVenda;

    @Column (name="ativo", nullable = false)
    private boolean ativo;

    @OneToMany(mappedBy="categoria", fetch = FetchType.LAZY)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Collection <ProdutoVO> produto;

    @OneToMany(mappedBy="codCategoria", fetch = FetchType.LAZY)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Collection <SubcategoriaVO> subcategoria;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "cod_marca", insertable = true, updatable = true, nullable = false)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private MarcaVO marcas;


    public CategoriaVO (){  }

    public CategoriaVO(int codCategoria,MarcaVO marca,String descricao, Double comissaoVenda)
    {
        this.setCodCategoria(codCategoria);
        this.setMarca(marca);
        this.setDescricao(descricao);
        this.setComissaoVenda(comissaoVenda);
        this.setAtivo(true);
    }

    public int getCodCategoria() {
        return codCategoria;
    }

    public void setCodCategoria(int codCategoria) {
        this.codCategoria = codCategoria;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public double getComissaoVenda() {
        return comissaoVenda;
    }

    public void setComissaoVenda(double comissaoVenda) {
        this.comissaoVenda = comissaoVenda;
    }

    public boolean isAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public Collection<ProdutoVO> getProduto() {
        return produto;
    }

    public void setProduto(Collection<ProdutoVO> produto) {
        this.produto = produto;
    }

    public Collection<SubcategoriaVO> getSubcategoria() {
        return subcategoria;
    }

    public void setSubcategoria(Collection<SubcategoriaVO> subcategoria) {
        this.subcategoria = subcategoria;
    }

    public MarcaVO getMarca() {
        return marcas;
    }

    public void setMarca(MarcaVO marca) {
        this.marcas = marca;
    }


}